home *** CD-ROM | disk | FTP | other *** search
-
- property pDegToRad : 57.295779513082 --conversion factor to get degrees from radians
- property pMMPerDegree : 10
-
- --these three need to be set correctly
- property pDistanceFromScreen_mm : 570
- property pScreenWidthMM : 335 --mm
- property pScreenHeightMM : 225 --mm
- --set these three
-
-
- --these will be set for you
- property pScreenSize : {}
- property pXpixels : 0
- property pYpixels : 0
- property pXDegrees : 0
- property pYDegrees : 0
- property pXCentrePixel : 0
- property pYCentrePixel : 0
- property pPixelsPerDegree : 0
- property pMsecPerFrame : 0
- property pFramesPerSecond : 0
-
- --properties to help with stimuli such as smooth pursuit tasks: this reflects what you want to do
- property pPixelsPerFrame : 0
- property pframesPerCycle : 0
- property pCyclespersecond : 0
- property pXmax : 0
- property pXmin : 0
-
-
- -->>Handlers
- to setDistanceScreenXAndScreenY(screenParameters) --call this first
- set pScreenWidthMM to pScreenWidth_mm of screenParameters
- set pScreenHeightMM to pScreenHeight_mm of screenParameters
- my setDistanceFromScreen(pScreenDistance_mm of screenParameters) --this will also init the other dependent vars
- end setDistanceScreenXAndScreenY
-
-
- to setDistanceFromScreen(mmFromScreen) --called for you by "setDistanceScreenXAndScreenY"
- set pDistanceFromScreen_mm to mmFromScreen
- set pMMPerDegree to (sine of (1 / pDegToRad)) * pDistanceFromScreen_mm
- my iInitialize()
- end setDistanceFromScreen
-
- to iInitialize() -- you never need to call this
- tell application "PsyScript"
- --physical properties
- set pScreenSize to screen size
- set pXpixels to (get item 1 of pScreenSize)
- set pYpixels to (get item 2 of pScreenSize)
- set pXDegrees to pScreenWidthMM / pMMPerDegree
- set pYDegrees to pScreenHeightMM / pMMPerDegree
- set pXCentrePixel to round pXpixels / 2
- set pYCentrePixel to round pYpixels / 2
- set pPixelsPerDegree to pXpixels / pXDegrees
- set pMsecPerFrame to tick time
- set pFramesPerSecond to 1 / (pMsecPerFrame / 1000)
- end tell
- end iInitialize
-
- -->>Graphics Handlers
-
- -->> Things to help with rectangles
- --getCentroid({{left, top}, {right, bottom}})
- --getCentroid({left, top, right, bottom})
-
- on makeRect(side) --makes a rect this on a side
- return {0, 0, round side, round side}
- end makeRect
-
- on scaleRect(theRect, scaleFactor) --makes a rect this on a side
- set {l, t, r, b} to theRect
- return {l, t, ((r - l) * scaleFactor) + l, ((b - t) * scaleFactor) + t}
- end scaleRect
-
- to centreRectOnPoint(theRect, thePoint) --currently inefficient two-pass version
- --zero the rect (set tl to 0,0
- set {l, t, r, b} to theRect
- set theRect to {0, 0, r - l, b - t}
- set initialCentre to my getCentroid(theRect)
- set xOffset to (item 1 of thePoint) - (item 1 of initialCentre)
- set yOffset to (item 2 of thePoint) - (item 2 of initialCentre)
- set theRect to {l + xOffset, t + yOffset, r + xOffset, b + yOffset}
- return theRect
- end centreRectOnPoint
-
-
- on getCentroid(theRect)
- local x
- local y
- if class of item 1 of theRect is list then --assume 2 points
- try
- set {{l, t}, {r, b}} to theRect
- on error m number n
- error m number n
- end try
- else
- try
- set {l, t, r, b} to theRect
- on error m number n
- error m number n
- end try
- end if
- set x to round (l + (r - l) / 2)
- set y to round (t + (b - t) / 2)
- return {x, y}
- end getCentroid
-
-
- -->>Experiment-specific helpers
-
- to setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) --stimulus properties
- tell application "PsyScript"
- --derived stimulus properties
- set pPixelsPerFrame to round (degreesPerSecond * pPixelsPerDegree / pFramesPerSecond)
- -->>WARNING any non-integer part will cause inaccuracy!! check that this is within bounds
- set maxPixelExcursion to ((maxDegrees * pPixelsPerDegree) div pPixelsPerFrame) * pPixelsPerFrame --rounded to give a unit number of frames per cycle
- set pXmin to (pXCentrePixel - maxPixelExcursion)
- set pXmax to (pXCentrePixel + maxPixelExcursion)
-
- set pframesPerCycle to maxPixelExcursion / pPixelsPerFrame * 4 --target woudl have been pFramesPerSecond / cyclespersecond
- set pCyclespersecond to pFramesPerSecond / pframesPerCycle --fractional amounts are: 1 / (maxDegrees * 4 / degreesPerSecond)
- set obtainedDegPerSec to (pPixelsPerFrame * pFramesPerSecond) / pPixelsPerDegree
- return obtainedDegPerSec --degreesPerSecond
- end tell
- end setDiagonalStimulus
-
-
-